www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/game_Source/GameLib/magic/magic.cpp

    //Download by http://www.NewXing.com
#include "magic.h"
#include "..\\globle_func.h"
#include "..\\globle.h"


CMagic::CMagic(char *szMagicFile)
{
	FILE *file=fopen(szMagicFile,"rb");

	if(!file)
	{
		MsgBox("不能打开物品文件!%s",szMagicFile);
		return;
	}
	fread(&MagicHeader, sizeof(_MagicHeader), 1, file);
	Magic = new _Magic[MagicHeader.nMagicN];
	
	fread(Magic, MagicHeader.nMagicN*sizeof(_Magic), 1, file);
	fclose(file);
}

CMagic::~CMagic( )
{
	PA_SAFE_DELETE(Magic);
}

bool CMagic::UseMagic(ROLE* role, int type, int id)
{
	switch(type)
	{
	case 0:
	case 9:
		role->health += Magic[id].wHealthSelf;
		if(role->health > role->MaxHealth)
			role->health = role->MaxHealth;
		else if(role->health < 0)
		{
			role->health -= Magic[id].wHealthSelf;
			return false;
		}
		
		role->energy += Magic[id].wEnergySelf;
		if(role->energy > role->MaxEnergy)
			role->energy = role->MaxEnergy;
		else if(role->energy < 0)
		{
			role->energy -= Magic[id].wEnergySelf;
			return false;
		}
		role->vigor	+= Magic[id].wVigorSelf;
		if(role->vigor > role->MaxVigor)
			role->vigor = role->MaxVigor;
		else if(role->vigor < 0)
		{
			role->vigor -= Magic[id].wVigorSelf;
			return false;
		}

		role->Bmoney += Magic[id].wMoneySelf;
		if(role->Bmoney < 0)
		{
			role->Bmoney -= Magic[id].wMoneySelf;
			return false;
		}
		return true;
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	case 6:
		return false;
	}
	return false;
}

bool CMagic::UseMagic(int iOwner, int type, int id)
{
	switch(type)
	{
	case 0:
	case 9:
		Zoetic->ZoeticLink[iOwner].health += (WORD)Magic[id].wHealthSelf;
		if(Zoetic->ZoeticLink[iOwner].health & 0x8000)
		{
			Zoetic->ZoeticLink[iOwner].health -= (WORD)Magic[id].wHealthSelf;
			return false;
		}
		else if(Zoetic->ZoeticLink[iOwner].health > Zoetic->ZoeticLink[iOwner].MaxHealth)
			Zoetic->ZoeticLink[iOwner].health = Zoetic->ZoeticLink[iOwner].MaxHealth;

		Zoetic->ZoeticLink[iOwner].energy += (WORD)Magic[id].wEnergySelf;
		if(Zoetic->ZoeticLink[iOwner].energy & 0x8000)
		{
			Zoetic->ZoeticLink[iOwner].energy -= (WORD)Magic[id].wEnergySelf;
			return false;
		}
		else if(Zoetic->ZoeticLink[iOwner].energy > Zoetic->ZoeticLink[iOwner].MaxEnergy)
			Zoetic->ZoeticLink[iOwner].energy = Zoetic->ZoeticLink[iOwner].MaxEnergy;

		Zoetic->ZoeticLink[iOwner].vigor	+= (WORD)Magic[id].wVigorSelf;
		if(Zoetic->ZoeticLink[iOwner].vigor & 0x8000)
		{
			Zoetic->ZoeticLink[iOwner].vigor -= (WORD)Magic[id].wVigorSelf;
			return false;
		}
		else if(Zoetic->ZoeticLink[iOwner].vigor > Zoetic->ZoeticLink[iOwner].MaxVigor)
			Zoetic->ZoeticLink[iOwner].vigor = Zoetic->ZoeticLink[iOwner].MaxVigor;

		Zoetic->ZoeticLink[iOwner].Bmoney += (WORD)Magic[id].wMoneySelf;

		if(Zoetic->ZoeticLink[iOwner].Bmoney & 0x8000)
		{
			Zoetic->ZoeticLink[iOwner].Bmoney -= (WORD)Magic[id].wMoneySelf;
			return false;
		}
		return true;
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	case 6:
		return false;
	}
	return false;
}

void CMagic::AttackMagic(ROLE* role, int type, MagicIsUsing * magic_Link)
{
	int id = magic_Link->id;
	switch(type)
	{
	case 0:
	case 9:
		if((int)Magic[id].wHealth < 0)
		{
			if(magic_Link->owner == TMain)
				role->health += (((int)Magic[id].wHealth - role->attack)<<7)/(role->defend+128);
			else
				role->health += (((int)Magic[id].wHealth - Zoetic->ZoeticLink[id].attack)<<7)/(role->defend+128);
		}
		else
			role->health += Magic[id].wHealth;
		if(role->health > role->MaxHealth)
			role->health = role->MaxHealth;
		else if(role->health < 0)
			role->health = 0;
		role->energy += Magic[id].wEnergy;
		if(role->energy > role->MaxEnergy)
			role->energy = role->MaxEnergy;
		else if(role->energy < 0)
			role->energy = 0;
		role->vigor	+= Magic[id].wVigor;
		if(role->vigor > role->MaxVigor)
			role->vigor = role->MaxVigor;
		else if(role->vigor < 0)
			role->vigor = 0;

		role->v		+= Magic[id].wSpeed;
		if(role->v < 0)
			role->v = 0;
		role->speed	+= Magic[id].wSpeed;
		if(role->speed < 0)
			role->speed = 0;
		role->defend	+= Magic[id].wDefend;
		if(role->defend < 0)
			role->defend = 0;
		role->attack	+= Magic[id].wAttack;
		if(role->attack < 0)
			role->attack = 0;
		role->agility += Magic[id].wSpeed;
		if(role->agility < 0)
			role->agility = 0;

		role->Bmoney += Magic[id].wMoney;
		if(role->Bmoney < 0)
			role->Bmoney = 0;
		break;
	}
}

void CMagic::AttackMagic(int iOwner, int type, MagicIsUsing * magic_Link)
{
	int id = magic_Link->id;
	switch(type)
	{
	case 0:
	case 9:
		if((int)Magic[id].wHealth < 0)
		{
			if(magic_Link->owner == TMain)
				Zoetic->ZoeticLink[iOwner].health += (((int)Magic[id].wHealth - role->attack)<<7)/(Zoetic->ZoeticLink[iOwner].defend+128);
			else
				Zoetic->ZoeticLink[iOwner].health += (((int)Magic[id].wHealth - Zoetic->ZoeticLink[id].attack)<<7)/(Zoetic->ZoeticLink[iOwner].defend+128);
		}
		else
			Zoetic->ZoeticLink[iOwner].health += (WORD)Magic[id].wHealth;
		if(Zoetic->ZoeticLink[iOwner].health & 0x8000)
			Zoetic->ZoeticLink[iOwner].health = 0;
		else if(Zoetic->ZoeticLink[iOwner].health > Zoetic->ZoeticLink[iOwner].MaxHealth)
			Zoetic->ZoeticLink[iOwner].health = Zoetic->ZoeticLink[iOwner].MaxHealth;
		Zoetic->ZoeticLink[iOwner].energy += (WORD)Magic[id].wEnergy;
		if(Zoetic->ZoeticLink[iOwner].energy & 0x8000)
			Zoetic->ZoeticLink[iOwner].energy = 0;
		else if(Zoetic->ZoeticLink[iOwner].energy > Zoetic->ZoeticLink[iOwner].MaxEnergy)
			Zoetic->ZoeticLink[iOwner].energy = Zoetic->ZoeticLink[iOwner].MaxEnergy;
		Zoetic->ZoeticLink[iOwner].vigor	+= (WORD)Magic[id].wVigor;
		if(Zoetic->ZoeticLink[iOwner].vigor & 0x8000)
			Zoetic->ZoeticLink[iOwner].vigor = 0;
		else if(Zoetic->ZoeticLink[iOwner].vigor > Zoetic->ZoeticLink[iOwner].MaxVigor)
			Zoetic->ZoeticLink[iOwner].vigor = Zoetic->ZoeticLink[iOwner].MaxVigor;

		Zoetic->ZoeticLink[iOwner].v		+= (WORD)Magic[id].wSpeed;
		if(Zoetic->ZoeticLink[iOwner].v & 0x8000)
			Zoetic->ZoeticLink[iOwner].v = 0;
		Zoetic->ZoeticLink[iOwner].speed	+= (WORD)Magic[id].wSpeed;
		if(Zoetic->ZoeticLink[iOwner].speed & 0x8000)
			Zoetic->ZoeticLink[iOwner].speed = 0;
		Zoetic->ZoeticLink[iOwner].defend	+= (WORD)Magic[id].wDefend;
		if(Zoetic->ZoeticLink[iOwner].defend & 0x8000)
			Zoetic->ZoeticLink[iOwner].defend = 0;
		Zoetic->ZoeticLink[iOwner].attack	+= (WORD)Magic[id].wAttack;
		if(Zoetic->ZoeticLink[iOwner].attack & 0x8000)
			Zoetic->ZoeticLink[iOwner].attack = 0;
		Zoetic->ZoeticLink[iOwner].agility += (WORD)Magic[id].wSpeed;
		if(Zoetic->ZoeticLink[iOwner].agility & 0x8000)
			Zoetic->ZoeticLink[iOwner].agility = 0;

		Zoetic->ZoeticLink[iOwner].Bmoney += (WORD)Magic[id].wMoney;
		if(Zoetic->ZoeticLink[iOwner].Bmoney  & 0x8000)
			Zoetic->ZoeticLink[iOwner].Bmoney = 0;
		break;
	}
}